#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <string>
#include <vector>
//class Solution {
//public:
//    string longestCommonPrefix(vector<string>& strs) {
//        string ret;
//        if (strs.size() == 1)
//            return strs[0];
//        for (int i = 0; i < strs[0].size(); i++)
//        {
//            char target = strs[0][i];
//            int flag = 0;
//            for (int j = 1; j < strs.size(); j++)
//            {
//                if (strs[j].size() - 1 < i)
//                {
//                    flag = 1;
//                    break;
//                }
//                if (strs[j][i] != target)
//                {
//                    flag = 1;
//                    break;
//                }
//            }
//            if (flag)
//                break;
//            ret += target;
//        }
//        return ret;
//
//    }
//};
//class Solution {
//public:
//    string longestCommonPrefix(vector<string>& strs) {
//        if (strs.size() == 1)
//            return strs[0];
//        //string ret;
//        string tmp = strs[0];
//        for (int i = 1; i < strs.size(); i++)
//        {
//            int n1 = 0;
//            int n2 = 0;
//            string tmp1;
//            while (n1 < tmp.size() && n2 < strs[i].size())
//            {
//                if (tmp[n1] != strs[i][n2])
//                {
//                    break;
//                }
//                tmp1 += tmp[n1];
//                n1++;
//                n2++;
//            }
//            tmp = tmp1;
//        }
//        return tmp;
//
//    }
//};

//class Solution {
//public:
//    string longestPalindrome(string s) {
//        int len = 0;
//        string ret;
//        for (int i = 0; i < s.size(); i++)
//        {
//            string tmp1 = ishw(s, i, i);
//            if (tmp1.size() > ret.size())
//                ret = tmp1;
//            string tmp2 = ishw(s, i, i + 1);
//            if (tmp2.size() > ret.size())
//                ret = tmp2;
//        }
//        return ret;
//    }
//    string ishw(string& s, int left, int right)
//    {
//        while (left >= 0 && right < s.size() && s[left] == s[right])
//        {
//            left--;
//            right++;
//        }
//        if (left + 1 == right)
//            return "";
//        return s.substr(left + 1, right-left-1);
//    }
//};
//
//class Solution {
//public:
//    string removeDuplicates(string s) {
//        if (s.size() == 0)
//            return "";
//        stack<char> st;
//        for (int i = 0; i < s.size(); i++)
//        {
//            if (!st.empty())
//            {
//                char top = st.top();
//                if (top != s[i])
//                {
//                    st.push(s[i]);
//                }
//                else
//                {
//                    st.pop();
//                }
//            }
//            else
//            {
//                st.push(s[i]);
//            }
//
//        }
//        string ret;
//        while (!st.empty())
//        {
//            ret += st.top();
//            st.pop();
//        }
//        reverse(ret.begin(), ret.end());
//        return ret;
//
//    }
//};
//
//class Solution {
//public:
//    bool backspaceCompare(string s, string t) {
//        string ret1;
//        string ret2;
//        for (auto e : s)
//        {
//            if (ret1.size() && e == '#')
//                ret1.pop_back();
//            if (e != '#')
//                ret1 += e;
//        }
//        for (auto e : t)
//        {
//            if (ret2.size() && e == '#')
//                ret2.pop_back();
//            if (e != '#')
//                ret2 += e;
//        }
//        //cout<<ret1<<endl;
//        //cout<<ret2<<endl;
//        return ret1 == ret2;
//    }
//};
class Solution {
public:
    int calculate(string s) {
        vector<int> nums;
        string ope;
        for (int i = 0; i < s.size();)
        {
            int num = 0;
            int flag = 0;
            while (s[i] >= '0' && s[i] <= '9')
            {
                flag = 1;
                num = num * 10 + (s[i] - '0');
                i++;
            }
            if (num || flag)
            {
                nums.push_back(num);
                if (ope.size() && (ope.back() == '/' || ope.back() == '*'))
                {
                    int right = nums.back();
                    nums.pop_back();
                    int left = nums.back();
                    nums.pop_back();
                    if (ope.back() == '/')
                    {
                        ope.pop_back();
                        nums.push_back(left / right);
                    }
                    else
                    {
                        ope.pop_back();
                        nums.push_back(left * right);
                    }
                }

            }
            else if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/')
            {
                ope += s[i++];
            }
            else
            {
                i++;
            }
        }
        int m = 0;
        for (int j = 0; j < ope.size(); j++)
        {
            int left = nums[m++];
            //nums.pop_back();

            int right = nums[m];
            //nums.pop_back();

            if (ope[j] == '+')
            {
                //ope.pop_back();
                nums[m] = left + right;
            }
            else
            {
                //ope.pop_back();
                nums[m] = left - right;
            }
        }
        return nums[m];
    }
};

int main()
{
    string s = "3+2*2";
    Solution().calculate(s);
}